// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
// #include "windows.h"
// // 队列节点结构
// typedef struct QueueNode {
//     int data; // 存储数据
//     struct QueueNode* next; // 指向下一个节点
// } QueueNode;
//
// // 队列结构
// typedef struct {
//     QueueNode* front; // 队头指针
//     QueueNode* rear;  // 队尾指针
// } LinkQueue;
//
// // 初始化队列
// void initQueue(LinkQueue* q) {
//     q->front = q->rear = (QueueNode*)malloc(sizeof(QueueNode)); // 创建一个头节点
//     if (q->front == NULL) {
//         perror("malloc failed");
//         exit(EXIT_FAILURE);
//     }
//     q->front->next = NULL; // 初始化头节点的next为NULL
// }
//
// // 判断队列是否为空
// bool isQueueEmpty(LinkQueue* q) {
//     return q->front->next == NULL; // 队头指针的next为NULL表示队列为空
// }
//
// // 入队操作
// bool enqueue(LinkQueue* q, int value) {
//     QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode)); // 创建新节点
//     if (newNode == NULL) {
//         perror("malloc failed");
//         return false;
//     }
//     newNode->data = value; // 设置新节点的数据
//     newNode->next = NULL; // 新节点的next指针设置为NULL
//
//     q->rear->next = newNode; // 将新节点链接到队尾
//     q->rear = newNode; // 更新队尾指针
//     return true;
// }
//
// // 出队操作
// bool dequeue(LinkQueue* q, int* value) {
//     if (isQueueEmpty(q)) { // 检查队列是否为空
//         printf("队列为空，无法出队!\n");
//         return false;
//     }
//     QueueNode* temp = q->front->next; // 保存队头节点
//     *value = temp->data; // 获取队头节点的数据
//     q->front->next = temp->next; // 将队头指针的next指向下一个节点
//     if (q->rear == temp) { // 如果队尾节点就是队头节点
//         q->rear = q->front; // 更新队尾指针为头节点
//     }
//     free(temp); // 释放队头节点
//     return true;
// }
//
// // 获取队头元素
// bool getFront(LinkQueue* q, int* value) {
//     if (isQueueEmpty(q)) { // 检查队列是否为空
//         printf("队列为空，无法获取队头元素!\n");
//         return false;
//     }
//     *value = q->front->next->data; // 获取队头节点的数据
//     return true;
// }
//
// // 打印队列
// void printQueue(LinkQueue* q) {
//     if (isQueueEmpty(q)) { // 检查队列是否为空
//         printf("队列为空\n");
//         return;
//     }
//     QueueNode* current = q->front->next; // 从队头节点开始
//     while (current != NULL) {
//         printf("%d ", current->data);
//         current = current->next;
//     }
//     printf("\n");
// }
//
// // 销毁队列
// void destroyQueue(LinkQueue* q) {
//     while (!isQueueEmpty(q)) { // 逐个释放队列中的节点
//         int value;
//         dequeue(q, &value);
//     }
//     free(q->front); // 释放头节点
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkQueue q;
//     initQueue(&q); // 初始化队列
//
//     // 入队操作
//     enqueue(&q, 10);
//     enqueue(&q, 20);
//     enqueue(&q, 30);
//     printf("入队后队列中的元素: ");
//     printQueue(&q);
//
//     // 获取队头元素
//     int value;
//     if (getFront(&q, &value)) {
//         printf("队头元素: %d\n", value);
//     }
//
//     // 出队操作
//     if (dequeue(&q, &value)) {
//         printf("出队元素: %d\n", value);
//     }
//     printf("出队后队列中的元素: ");
//     printQueue(&q);
//
//     // 判断队列是否为空
//     if (isQueueEmpty(&q)) {
//         printf("队列为空\n");
//     } else {
//         printf("队列不为空\n");
//     }
//
//     // 销毁队列
//     destroyQueue(&q);
//
//     return 0;
// }